package com.rem.designPattern.observer观察者;

/**
 * 观察者模式
 * 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新
 *
 * @author Rem
 * @date 2022-11-25
 */
public interface Observer {

    /**
     * 更新消息
     *
     * @param message
     */
    void update(String message);

    /**
     * 关注公众号
     *
     * @param subject
     */
    void follow(Subject subject);

    /**
     * 取消订阅公众号
     *
     * @param subject
     */
    void cancel(Subject subject);
}

class WeixinUser implements Observer {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public WeixinUser(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name + "～收到消息～" + message);
    }

    @Override
    public void follow(Subject subject) {
        subject.attach(this);
    }

    @Override
    public void cancel(Subject subject) {
        subject.detach(this);
    }
}